#ifndef _LAYOUT_LIB_H_
#define	_LAYOUT_LIB_H_

#include <map>
#include "Basic_Static_lyvm.h"
#include "Basic_Dynamic_lyvm.h"
#include "Stretch_Static_lyvm.h" /* Example */
#include "Shrink_Static_lyvm.h" /* Example */
#include "Spring_Dynamic_lyvm.h" /* Example */
#include "BinaryTree_Dynamic_lyvm.h" /*add by hyt*/
#include "LinkList_Dynamic_lyvm.h" /*add by hyt*/
#include "Graphviz_Static_lyvm.h" // add by ParrotT

// add comment by ParroT
// 2010/04/21
//
// layoutLibrary 負責管理DIVA的所有layout，並且動態產生layout 彈跳式選單(ContextStripMenu)，簡化與方便管理layout的操作
// layoutLibrary 使用singleton design pattern利用讓其他類別呼叫並保持layout的單一性
// 另外使用strategy design pattern 增加layout的擴充性 而不必改到主要的程式碼
// 包含了使用兩個map各別記錄static & dynamic layout 透過多形的方式存取各個layout ( 有點template design pattern的feel~ )
class LyvmLayoutLibrary {

private:	
	static LyvmLayoutLibrary *	_lLib;
	std::map<int,Basic_Static_lyvm*> _slyTable;
	std::map<int,Basic_Dynamic_lyvm*> _dlyTable;
	
	LyvmLayoutLibrary();
public:
	static LyvmLayoutLibrary* getInstance();
	Basic_Static_lyvm* getStaticLyVMbyID(int);
	Basic_Dynamic_lyvm* getDynamicLyVMbyID(int);
	std::map<int,string> getStaticIDNameList();
	std::map<int,string> getDynamicIDNameList();
	Basic_Dynamic_lyvm* getCurrentEnabledDynamicLy();
	bool doesLayoutEnable();
	/// destructor
	~LyvmLayoutLibrary();
};

#endif 
